﻿# -*- coding: utf-8 -*-
import cherrypy
import sqlalchemy
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship, backref
import db  
from datetime import date
import auth
from index import template
import anketa

class CirclePreview(db.Base):

    __tablename__ = 'circle_preview'

    id = Column(Integer, primary_key=True)
    title = Column(String)
    description = Column(String)
    age = Column(String)
    entrance = Column(Integer) #Вступительная работа

class CirclePreviewController(object):
    @cherrypy.expose
    def preview(self, *args):
        return template(self.view(*args))


    @cherrypy.expose
    def view(self, *args):
        result = ''
        if len(args) == 0:
            result += '<b>Предварительный список кружков</b><br><br>'
            result += '<u>Кружки в Центре работы с одаренными школьниками МИОО (м.Спортивная)</u><br>'
            for row in db.session.query(CirclePreview).filter(CirclePreview.id < 1000).all():
                if auth.member_of('admin')():     
                    id = str(row.id)
                    ank = len(db.session.query(anketa.Anketa).filter(anketa.Anketa.circle_ids.like('%' + id + '%')).all())
                    ank -= len(db.session.query(anketa.Anketa).filter(anketa.Anketa.circle_ids.like('%1' + id + '%')).all())
                    result += '[' + str(ank) + ' чел.] '
                result += '''{0}: {1} <a href='/circle_preview/view/{2}'>подробнее</a> '''.format(row.id,
                          row.title, row.id)
                if auth.member_of('admin')():     
                    result += '''<a href='/circle_preview/edit/{}'>редактировать</a> 
                    <a href='/circle_preview/delete/{}'>удалить</a>'''.format(row.id, row.id)
                result +='<br>'
            result += '<br><u>Кружки в школе-интернате "Интеллектуал" (м.Славянский бульвар)</u><br>'
            for row in db.session.query(CirclePreview).filter(CirclePreview.id >= 1000).all():
                if auth.member_of('admin')():     
                    id = str(row.id)
                    ank = len(db.session.query(anketa.Anketa).filter(anketa.Anketa.circle_ids.like('%' + id + '%')).all())
                    result += '[' + str(ank) + ' чел.] '
                result += '''{0}: {1} <a href='/circle_preview/view/{2}'>подробнее</a> '''.format(row.id,
                          row.title, row.id)
                if auth.member_of('admin')():     
                    result += '''<a href='/circle_preview/edit/{}'>редактировать</a> 
                    <a href='/circle_preview/delete/{}'>удалить</a>'''.format(row.id, row.id)
                result +='<br>'
            return result
        else:
            cp = db.session.query(CirclePreview).get(int(args[0]))
            if cp is None:
                return template('''Такого курса нет в базе данных.''')
            else:
                temp = [''' <h3>{}: {}</h3>
                           {}
                           <br><br><i>{}</i>
                           <br><br>{}
                       <br><br><br>''']

            if auth.member_of('admin')():     
                temp += ['<b>Cписок анкет</b><br><table border="1">',
                           '<tr><td>id</td><td></td><td>Фамилия</td><td>Имя</td><td>Класс</td><td>Школа</td><td>Город</td><td>Год заполнения</td><td>E-mail</td><td>ICQ</td><td>Jabber</td><td>vkontakte</td><td>skype</td><td>моб.телефон</td><td>Контактное лицо</td><td>опыт</td><td>языки</td><td>осн.языки</td><td>научил</td><td>Олимпиады по информатике</td><td>олимпиады по математике</td><td>Кружки</td><td>кол-во</td><td>удобное время</td><td>чего не хватает?</td><tr>']
                print(CirclePreview.id)
                for row in db.session.query(anketa.Anketa).filter(anketa.Anketa.circle_ids.like('%' + args[0] + '%')).all(): 
                    if row.lastname:
                        temp += ['<tr><td>' + str(row) + '</td></tr>']
                temp += ['</table>']
            print('*********************************')
            return template("".join(temp).format(cp.id, cp.title or '', cp.description or '', 
                          cp.age or '', cp.entrance or '') + '<br><hr><br>' + self.view())


    @cherrypy.expose
    def save(self, **args):
        if auth.member_of('admin')():     
            cp = db.session.query(CirclePreview).get(args['id'])
            if cp is None:
                return template('''Такого курса нет в базе данных.''')
            else:
                (cp.title, cp.description, cp.age, cp.entrance) = (args['title'],
                           args['description'], args['age'], args['entrance'])
                db.session.commit()
        raise cherrypy.HTTPRedirect('/circle_preview/preview/')


    @cherrypy.expose
    def delete(self, *args):
        if auth.member_of('admin')():     
            cp = db.session.query(CirclePreview).get(args[0])
            if cp is None:
                return template('''Такого курса нет в базе данных.''')
            else:
                db.session.delete(cp)
                db.session.commit()
            raise cherrypy.HTTPRedirect('/circle_preview/view/')


    @cherrypy.expose
    def create(self, id):
        if auth.member_of('admin')():     
            db.session.add(CirclePreview(id=id))
            try:
                db.session.commit()
                raise cherrypy.HTTPRedirect('/circle_preview/form/' + str(id))
            except sqlalchemy.exc.IntegrityError:
                #circle already exists
                db.session.rollback()
                return template('''Кружок id{} уже существует в базе данных'''.format(id))


    @cherrypy.expose
    def form(self, id):
        if auth.member_of('admin')():     
            cp = db.session.query(CirclePreview).get(id)
            if cp is None:
                return template('''Такого курса нет в базе данных.''')
            else: 
                return template('''<form method=POST action='/circle_preview/save'><table border='0'>
                  <tr><td align='right' valign='top'>ID:</td><td><input type='text' name = 'id' size='10' value='{}'></td></tr>
                  <tr><td align='right' valign='top'>Название:</td><td><input type='text' size='80' name = 'title' value='{}'></td></tr>
                  <tr><td align='right' valign='top'>Описание:</td><td><TEXTAREA name='description' rows='10' cols='80'>{}</TEXTAREA></td></tr>
                  <tr><td align='right' valign='top'>На кого рассчитан:</td><td><input type='text' size='80' name = 'age' value='{}'></td></tr>
                  <tr><td align='right' valign='top'>Что требуется сделать для поступления:</td><td>
                         <TEXTAREA valign='bottom' name='entrance' rows='4' cols='80'>{}</TEXTAREA></td></tr>
                  <tr><td align='right' valign='top'><input type='submit' value='Сохранить изменения'></td><td></td></tr>
                  </table></form>
                '''.format(cp.id, cp.title or '', cp.description or '', cp.age or '', cp.entrance or ''))

#db.Base.metadata.create_all(db.engine) #create table
